今天來簡單的介紹一下進制轉換的概念
以我們生活日常所使用的不外乎就是熟悉的十進制(Decimal)
而在計算機處理上又或者是演算法...etc都是以二進制(010101000...)來處理
還記得小時候看到010101的場景就是在電影駭客任務中(?)
但大概那時候也看不懂是什麼 (現在也是)
因此才需要進制轉換
而進制轉換中的規則可以區分為兩個
下方有簡易的例子供參考
然而如何將此邏輯換到C呢
以下有實例
也是拆成其他進制轉十進制
或者拆成十進制轉其他進制
因此這邊先暫時用1和2來分辨要做十進制轉X進制或X進制轉十進制
Ex: input:
1
16 1234
Output:
4D2
Ex: input:
2
9 1234
Output:
922
10進制轉X進制
void transform10X(int base,int x){
int num=x,index=1,ans=0;
while(num>=base){
num = num/base;
index = index*base;
}
while(index>0){
ans = x/index;
x = x-(index*ans);
index = index/base;
printf("%c",ans<10?('0'+ans):('A'+(ans-10)));
}
printf("\n");
return;
}
於X進制轉10進制
這邊小弟使用的方法稍微麻煩一點繞了一下
由於X進制中必須考慮到'A''B''C''D''E''F'的存在
因此在輸入時必須以字元的方式存取 (稀疏記得有更好的方法但好像是別的語言的事)
而收到以後再以ans[i]拆成各別元素以便之後計算
其實在收到輸入以後就可以先以ASCII的方式先判別該字元是對應到的十進制但因為我忘了所以就先這樣XD(忘記還講這麼大聲)
X進制轉10進制
void transformX10(){
int base=0,i=0,j=0,k=0;
double temp=0.0,total=0.0;
char ans[100]={'\0'};
char x;
scanf("%d ",&base);
while(x!='\n'){
scanf("%c",&x);
ans[i]=x;
i++;
}
i--;
while(i!=0){
temp = temp + ans[j];
printf("i=%d \n",i);
if(ans[j]<=57){
total = total+ (ans[j]-48)*pow(base,i-1);
}
else if(ans[j]<=70){
total = total+ (ans[j]-55)*pow(base,i-1);
}
j++;
i--;
}
printf("%d",total);
}
int main(){
int x=0,base=0,opt=0;
scanf("%d",&opt);
if(opt==1){
scanf("%d %d",&base,&x);
transform10X(base,x);
}
else if(opt==2){
transformX10();
}
return 0;
}